﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Clases.Persistencia.NHibernate;
using Clases.Dominio;

namespace Clases.Pruebas
{
    [TestFixture]
    public class TestTutorDAO
    {
        //Instancia el objeto DAO a probar
        private TutorDAO tutorDAO = new TutorDAO();

        [Test]
        public void TestCrear()
        {
            // 1. Instancia el objeto a probar
            Tutor pruebaTutor = new Tutor();

            // 2. Instanciando el objeto TO            
            pruebaTutor.Codigo = "pcsihsai";
            pruebaTutor.Nombres = "Héctor";
            pruebaTutor.Apellidos = "Saira";
            pruebaTutor.Correo = "pcsihsai@upc.edu.pe";

            // 3. Llamada al método del DAO a probar
            Tutor tutorCreado = tutorDAO.Crear(pruebaTutor);

            // 4. Implementar las validaciones
            Assert.NotNull(tutorCreado);
            Assert.AreEqual(pruebaTutor.Nombres, tutorCreado.Nombres);
        }

        [Test]
        public void TestObtener()
        {
            // 1. Instancia el objeto a probar
            Tutor pruebaTutor = new Tutor();

            // 2. Instanciamos el objeto TO
            pruebaTutor.Codigo = "pcsihsai";

            // 3. Llamada al método del DAO a probar
            Tutor tutorObtenido = tutorDAO.Obtener(pruebaTutor.Codigo);

            // 4. Implementar las validaciones
            Assert.NotNull(tutorObtenido);
            Assert.AreEqual(pruebaTutor.Codigo, tutorObtenido.Codigo);
            Assert.NotNull(tutorObtenido.Nombres);
        }

        [Test]
        public void TestModificar()
        {
            // 1. Instancia el objeto a probar
            Tutor pruebaTutor = new Tutor();

            // 2. Instanciamos el objeto TO
            pruebaTutor.Codigo = "pcsihsai";
            pruebaTutor.Nombres = "David";
            pruebaTutor.Apellidos = "Enciso";
            pruebaTutor.Correo = "bn@upc.edu.pe";

            // 3. Llamada al método del DAO a probar
            Tutor tutorMod = tutorDAO.Modificar(pruebaTutor);

            // 4. Implementar las validaciones
            Assert.NotNull(tutorMod);
            Assert.AreEqual(pruebaTutor.Correo, tutorMod.Correo);
        }
        
        [Test]
        public void TestEliminar()
        {
            // 1. Instancia el objeto a probar
            Tutor tutorEliminar = new Tutor();

            // 2. Instanciamos el objeto TO            
            tutorEliminar.Codigo = "pcsihsai";

            // 3. Llamada al método del DAO a probar
            Assert.DoesNotThrow(delegate
            {
                tutorDAO.Eliminar(tutorEliminar);
            });

            // 4. Implementar las validaciones
            Assert.NotNull(tutorEliminar);
            Assert.NotNull(tutorEliminar.Codigo);
        }

        [Test]
        public void TestListar()
        {
            string correo = "upc.edu.pe";

            ICollection<Tutor> LTutor = tutorDAO.ListarTutoresPorDominioCorreo(correo);
            Assert.NotNull(LTutor);
            Assert.Greater(LTutor.Count, 0);
        }
    }
}